package com.aliyun.messagemgt.application.service;

import com.aliyun.messagemgt.common.dto.send.PushChannelInfo;
import com.aliyun.messagemgt.dto.MsgAdd;
import com.aliyun.messagemgt.dto.MsgSource;
import com.aliyun.messagemgt.dto.MsgSourceDto;
import com.aliyun.messagemgt.dto.query.BaseMessageSourceQuery;
import com.aliyun.messagemgt.dto.query.MsgQuery;
import com.aliyun.messagemgt.dto.vo.DepVo;
import com.aliyun.messagemgt.dto.vo.MessageTypeVO;
import com.aliyun.messagemgt.dto.vo.MsgSourceVO;
import com.aliyun.messagemgt.dto.vo.PendingEventForMsgSourceVO;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageInfo;

import java.util.List;

/**
 * @Description
 * @Author hzw
 * @Date 2020/12/18 17:59
 * @Version 1.0
 */
public interface MsgSourceService {


    int countMsgSouece(MsgQuery msgQuery);

    /**
     * 注册发布消息源
     *
     * @param msgAdd
     * @return
     */
    Integer addMsgSource(MsgAdd msgAdd);

    /**
     * 消息源保存
     *
     * @param msgAdd
     * @return
     */
    Integer saveMsgSource(MsgAdd msgAdd);

    /**
     * 下线消息源
     *
     * @param msgAdd
     * @return
     */
    Integer modMsgSource(MsgAdd msgAdd);

    /**
     * 查询消息源列表
     *
     * @param msgQuery
     * @return
     */
    Page<MsgSourceVO> listMsgSource(MsgQuery msgQuery);

    /**
     * 消息源详情
     *
     * @param msgQuery
     * @return
     */
    MsgSourceVO msgSourceDetail(MsgQuery msgQuery);

    /**
     * 消息分发列表
     *
     * @param msgQuery
     * @return
     */
    PageInfo<MsgSourceVO> queryMsgList(MsgQuery msgQuery);

    /**
     * 查询消息源筛选部门列表
     *
     * @param msgQuery
     * @return
     */
    List<DepVo> listOwnerDept(MsgQuery msgQuery);

    /**
     * 查询消息时部门筛选列表
     *
     * @param msgQuery
     * @return
     */
    List<DepVo> listOwnerDeptForMessage(MsgQuery msgQuery);

    /**
     * 删除消息源
     *
     * @param msgQuery
     * @return
     */
    int deleteMsgSource(MsgQuery msgQuery);

    /**
     * 根据推送渠道获取相应消息类型
     *
     * @return
     */
    List<MessageTypeVO> listMessageTypes();

    /**
     * 查询短信消息源列表
     *
     * @param msgQuery 查询条件
     * @return 分页结果
     */
    Page<MsgSourceVO> smsMsgSourceList(MsgQuery msgQuery);

    /**
     * 根据uuid查询消息源
     *
     * @param msgSourceId
     * @return
     */
    MsgSource getMsgSourceBySourceId(String msgSourceId);

    /**
     * 通过sourceCode获取消息源信息
     *
     * @param sourceCode
     * @return
     */
    MsgSource getMsgSourceBySourceCode(String sourceCode);

    /**
     * 启停用
     *
     * @param msgSourceDto
     * @return
     */
    Integer updateStatus(MsgSourceDto msgSourceDto);

    /**
     * 根据发送任务id获取渠道信息
     *
     * @param msgSourceId
     * @return
     */
    List<PushChannelInfo> getPushChannelByMsgSourceId(Long msgSourceId);

    MsgSource getMsgSource(MsgQuery qry);

    Integer selectMsgSourceIdByMessageCode(String messagecode);


    Object noSpecifiedBaseMessageSourcelist(BaseMessageSourceQuery baseMessageSourceQuery);
}
